其他
不能秒回女友?用聊天记录克隆AI分身,分分钟化身为1V100的“时间管理大师”!
大家好,我是梦飞。
好久不见,一个月前发布的视频号内容,今天终于能够填坑了!
本次带来的教程是:
《用聊天记录克隆自己的AI分身》
在我多次尝试(其实是多个平台账号欠费之后),终究是放弃了让大家云端使用,学习和使用成本太高。
为了降低门槛,本篇教程依然全程本地操作,无需调用云端资源。让大家既能体验大模型训练和调用,又可以无负担的使用自己微调后的大模型!
话不多数,准备开始,首先明确下目标:
本篇教程的目标是,把自己微信中的聊天记录导出,用自己的聊天记录去微调一个模型,最终将这个微调后的模型接入微信中,替你回复消息。
本文较长,看不完建议先!收!藏!
5、接入Cow微信机器人项目
补充说明:
1. 本篇教程可以带你手把手无痛的体验如何自建数据集,并使用LoRA微调大模型(SFT)。但模型训练是一个多方因素影响,需要不断调参、优化。因此受数据集质量和参数影响,即使跟随本篇教程完全操作完成,是不能保证你训练的模型是“聪明”可用的。因此需要放低期待,沉下心去做。
2. 同时也因我简化了内容,所以门槛相对降低很多,因此相信你花点时间就一定可以完成。以下教程基于Windows11系统进行制作。
一、导出聊天记录
我们需要借助一个工具:“MemoTrace 留痕”,是一款强大的微信聊天记录管理工具
在这台电脑上登录微信,然后直接点击获取信息,会自动获取到你的微信信息
点击解析数据,开始解析,等待解析完成。 选择「好友」导航栏,选择你聊天比较多的好友。(之前可以多选导出全部,但是最新版本不可以了,也可能是我没找到功能点,大家可以找找看,但根据经验,建议只导出自己经常聊天的几个人的记录就可以了,太多没有连续对话的,没有背景信息的上下文,反而可能导致效果不好。 点击「导出json」,只要这个格式是最方便转换为我们需要的训练集格式。
导出后我们会得到两个文件,我们只需要用到_train后缀的文件即可。
二、整理聊天记录为数据集
如果你导出了多个人的,需要你手动将这个文件下的内容,全部汇总到一起。
汇总完成后,保存你的汇总文件,命名为“train.json”。
在当前文件夹下新建一个文本文档,重命名为“1.py”,然后用记事本打开,粘贴进入以下代码。
import json
import re
import os
def process_file(input_file, output_file):
try:
with open(input_file, 'r', encoding='utf-8') as f:
content = f.read()
print(f"Successfully read input file: {input_file}")
# Remove leading '[' and trailing ']'
content = content.strip()[1:-1]
# Use regex to match each dialogue object
pattern = r'\{[^{}]*"messages":\s*\[[^[\]]*\][^{}]*\}'
matches = re.finditer(pattern, content)
match_count = 0
with open(output_file, 'w', encoding='utf-8') as f:
for match in matches:
dialogue = json.loads(match.group())
# Ensure each dialogue has a system message
if not any(msg['role'] == 'system' for msg in dialogue['messages']):
dialogue['messages'].insert(0, {
"role": "system",
"content": "你是张梦飞(此处换成你的名字),一个聪明、热情、善良的人,后面的对话来自你的朋友,你要认真地回答他"
})
# Write JSON object in OpenAI format
f.write(json.dumps({"messages": dialogue['messages']}, ensure_ascii=False) + '\n')
match_count += 1
print(f"Processing complete. {match_count} dialogues written to {output_file}")
except FileNotFoundError:
print(f"Error: Input file not found: {input_file}")
except json.JSONDecodeError as e:
print(f"Error: Invalid JSON in input file: {e}")
except Exception as e:
print(f"An unexpected error occurred: {e}")
# Use the script
input_file = 'train.json' # Update this to your actual input file name
output_file = 'train_formatted.jsonl'
current_dir = os.path.dirname(os.path.abspath(__file__))
input_path = os.path.join(current_dir, input_file)
output_path = os.path.join(current_dir, output_file)
print(f"Input file path: {input_path}")
print(f"Output file path: {output_path}")
process_file(input_path, output_path)
打开命令行窗口,输入“python 1.py”
聊天记录整理完成,在第31步时会用到。
三、部署LLama Factory
打开MicroSoft Store,搜索Ubuntu 找到Ubuntu 18.04.6 LTS版本,点击下载
下载完成后,点击打开,如下图
先输入你的用户名,然后点击回车,再输入密码,然后点击回车(注意,在Ubuntu中,输入的用户名和密码是不现实的,输入后直接回车即可) 密码输入后回车,会显示:操作成功和下方代码。
升级apt,输入以下命令,点击回车。输入你的用户密码,点击回车,开始自动升级。
sudo apt update && sudo apt full-upgrade -y
出现绿色的用户名代表执行完成。wget -U NoSuchBrowser/1.0 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.02-1-Linux-x86_64.sh
输入以下命令,安装conda(输入命令后,一直按着回车)
sh Anaconda3-2024.02-1-Linux-x86_64.sh
激活conda环境,一行一行,依次输入以下命令
cd
cd anaconda3/
cd bin
./conda init
source ~/.bashrc
下载通义千问-0.5b大模型(最小模型,大家都能玩,先跑通再来下载更大的模型) 输入以下代码,检查你是否有git,显示版本号就是有git。
cd
git --version
每一行,依次粘贴输入以下代码,保证你的 lfs 可用
sudo apt-get update
sudo apt-get install git-lfs
mkdir my-new-repo
cd my-new-repo
git init
git status
git lfs install
输入以下代码,下载大模型
cd ..
git clone https://www.modelscope.cn/Qwen/Qwen2-0.5B.git
下载LLaMA-Factory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
下载完成后,依次一行一行的粘贴下方命令并回车,创建一个LLaMA-Factory运行的专属环境
cd LLaMA-Factory
conda create -n fine-tuning python=3.10
输入以下代码,激活 fine-tuning环境。
conda activate fine-tuning
安装依赖文件,输入以下命令等待下载完成。
pip install -e ".[torch,metrics]" -i https://pypi.tuna.tsinghua.edu.cn/simple
运行LLaMA-Factory,并打开操作页面。
llamafactory-cli webui
查找模型路径
复制home后边的路径,粘贴进入:「模型路径输入框」,选择对应的「模型名称」
把你在第11步整理好的数据,复制粘贴到你的\LLaMA-Factory\data文件夹下,粘贴完成后。 打开dataset_info.json文件,修改文件内容。在这个文件的最后,粘贴进入以下代码
,
"train_formatted": {
"file_name": "train_formatted.jsonl",
"formatting": "sharegpt",
"columns": {
"messages": "messages"
},
"tags": {
"role_tag": "role",
"content_tag": "content",
"user_tag": "user",
"assistant_tag": "assistant",
"system_tag": "system"
}
}
返回LLaMA的页面,查看「数据集」,选择刚刚添加完成的“train_formatted”数据集。
再找到这个文件夹下的“identity.json”文件,双击打开
再添加选中“identity”数据集。
训练轮数改成15,其他的都暂时不动。 点击「预览命令」,无报错后,点击「开始」,开始训练。
选择chat页,点击「检查点路径」,选择刚才训练Lora的输出目录名称,然后点击加载模型。
这里需要说明下:训练大模型是一个需要反复调试的复杂过程,数据集和训练参数都会影响最终的训练效果,本次旨在带大家体验和跑通流程,模型的调优需要大家更深入的去学习和实践。
四、发布模型为API
对外发布训练后的模型接口
su - 你的用户名
然后需要激活啊conda环境,输入以下代码激活,conda activate fine-tuning
以下是一个命令模版,你需要填入【你自己的文件路径】
CUDA_VISIBLE_DEVICES=2 API_PORT=8000 llamafactory-cli api --model_name_or_path /home/zmf/Qwen2-0.5B --adapter_name_or_path /home/zmf/LLaMA-Factory/saves/Qwen2-0.5B/lora/train_2024-10-09-00-20-10 --template qwen --finetuning_type lora
看到出现最后一行 http://0.0.0.0:8000后,再打开一个Ubuntu命令行窗口,输入
hostname -I
拿到这个地址后,打开浏览器输入:172.17.xx.xxx:8000/docs
点击第二个POST,打开折叠口
点击后往下滚动,如果看到Server response在的Code编码是“200”,说明API访问成功。
五、链接微信机器人
根据本地部署COW的教程,参考此篇在你自己电脑上部署COW微信机器人项目,将COW部署完成后。
替换COW中的config.json文件中的字段为:
"model":"qwen2-0.5b",
"open_ai_api_base":"http://172.17.35.174:8000/v1",
"open_ai_api_key":"sk-123456",
然后扫码执行登录,就大功告成了!如果遇到任何问题,可下方评论或者联系我,尽力回复和解答
往期推荐:
2. 留学睡马路、归国住公司,绿皮火车和20块的青旅大通铺 —— 一个普通人从地球到火星的梦想之路
3. 【AI+知识库】商业化问答场景,让AI回复更准确,一篇专为所有“小白”讲透RAG的实例教程(下篇)
4. 【微信机器人搭建共学活动汇总篇】小白做微信机器人搭建,看这一篇就够了!